/**
 * 简单的二维码生成工具
 * 使用在线API生成二维码图片
 */

/**
 * 生成二维码图片URL
 * @param {string} text - 要编码的文本
 * @param {number} size - 二维码大小（像素）
 * @returns {string} 二维码图片URL
 */
export function generateQRCode(text, size = 200) {
  // 使用免费的二维码API服务
  // 备选方案：
  // 1. https://api.qrserver.com/v1/create-qr-code/
  // 2. https://chart.googleapis.com/chart (Google Charts API)
  
  const encodedText = encodeURIComponent(text)
  return `https://api.qrserver.com/v1/create-qr-code/?size=${size}x${size}&data=${encodedText}`
}

/**
 * 在Canvas上绘制二维码
 * @param {CanvasRenderingContext2D} ctx - Canvas上下文
 * @param {string} text - 要编码的文本
 * @param {number} x - X坐标
 * @param {number} y - Y坐标
 * @param {number} size - 二维码大小
 * @returns {Promise<void>}
 */
export async function drawQRCode(ctx, text, x, y, size = 200) {
  return new Promise((resolve, reject) => {
    const qrUrl = generateQRCode(text, size)
    const img = new Image()
    img.crossOrigin = 'anonymous'
    
    img.onload = () => {
      try {
        ctx.drawImage(img, x, y, size, size)
        resolve()
      } catch (err) {
        console.error('绘制二维码失败:', err)
        reject(err)
      }
    }
    
    img.onerror = (err) => {
      console.error('加载二维码失败:', err)
      // 绘制占位符
      ctx.fillStyle = '#f0f0f0'
      ctx.fillRect(x, y, size, size)
      ctx.fillStyle = '#999'
      ctx.font = '14px Arial'
      ctx.textAlign = 'center'
      ctx.fillText('二维码', x + size / 2, y + size / 2)
      resolve() // 即使失败也继续
    }
    
    img.src = qrUrl
  })
}

/**
 * 使用Canvas绘制简单的二维码（不依赖外部API）
 * 这是一个简化版本，仅用于演示
 * @param {CanvasRenderingContext2D} ctx - Canvas上下文
 * @param {string} text - 要编码的文本
 * @param {number} x - X坐标
 * @param {number} y - Y坐标
 * @param {number} size - 二维码大小
 */
export function drawSimpleQRPlaceholder(ctx, text, x, y, size = 200) {
  // 绘制背景
  ctx.fillStyle = '#ffffff'
  ctx.fillRect(x, y, size, size)
  
  // 绘制边框
  ctx.strokeStyle = '#000000'
  ctx.lineWidth = 2
  ctx.strokeRect(x, y, size, size)
  
  // 绘制简单的方块图案（模拟二维码）
  const blockSize = size / 10
  ctx.fillStyle = '#000000'
  
  // 随机生成一些方块（基于文本内容生成伪随机）
  const seed = text.split('').reduce((acc, char) => acc + char.charCodeAt(0), 0)
  
  for (let i = 0; i < 10; i++) {
    for (let j = 0; j < 10; j++) {
      // 使用简单的伪随机算法
      const random = ((seed + i * 10 + j) * 9301 + 49297) % 233280 / 233280
      if (random > 0.5) {
        ctx.fillRect(x + i * blockSize, y + j * blockSize, blockSize, blockSize)
      }
    }
  }
  
  // 绘制三个定位点
  const cornerSize = blockSize * 3
  const positions = [
    [x, y], // 左上
    [x + size - cornerSize, y], // 右上
    [x, y + size - cornerSize] // 左下
  ]
  
  positions.forEach(([px, py]) => {
    // 外框
    ctx.fillStyle = '#000000'
    ctx.fillRect(px, py, cornerSize, cornerSize)
    // 内框
    ctx.fillStyle = '#ffffff'
    ctx.fillRect(px + blockSize, py + blockSize, blockSize, blockSize)
  })
}
